const path = require("path");
const fileUtils = require("../utils/file_utils")

// 引入websocket
// 创建WebSocket服务端的对象,绑定的端口号为9998
const WebSocket = require("ws");
const wss = new WebSocket.Server({
    port: 9998
});

// 服务端开启了监听
module.exports.listen = () => {
    // 对客户端的连接事件进行监听
    // client:代表的是客户端的连接socket对象
    wss.on('connection', client => {
        console.log("有客户端连接成功了");

        // 对客户端的连接对象进行message事件的监听
        // msg: 由客户端发给服务器的数据 
        // websocket可能会发送Blob, 所以需要使用第二个参数isBinary
        client.on("message", async (msg,isBinary) => {
            console.log("客户端发送给服务端的数据:" + msg);

            let payload = JSON.parse(msg);
            const action = payload.action;
            if(action === 'getData'){
                let filePath = "../data/" + payload.chartName + ".json";
                // payload.chartName // trend, seller, map, rank, hot, stock
                filePath = path.join(__dirname, filePath);

                const ret = await fileUtils.getFileJsonData(filePath);
                // 需要在服务端获取到数据的基础之上，增加一个data字段
                // data所对应的值, 就是某个json文件的内容
                payload.data = ret;
                client.send(JSON.stringify(payload));
            }else{
                // 原封不动地将我们接收到的数据转发给每一个处于连接状态的客户端
                wss.clients.forEach(client => {
                    // 这里会发送Blob, 指定第二个参数,会发送字符串
                    client.send(msg, {binary:isBinary});
                })
            }

            // 由服务端往客户端发送的数据
            // client.send("hello socket from backend");
        })
    })
}

